There are a wide variety of different types of computing systems. Some computing systems run applications that allow a user to author and edit documents. Some such applications include word processing applications, slide presentation applications, spreadsheet applications, among a wide variety of others. These types of applications often allow documents to be stored in files in a file system.
Some computing systems have portions deployed in a cloud computing (or other remote server) environment. For instance, some computing systems store files on a cloud computing data storage system. However, during authoring and editing of a document, the files may also be stored on a local disk by the application. Similarly, some systems have applications that support document collaboration, such as merge, sharing, co-authoring, and other functionality. Some systems thus have a synchronization engine (or sync engine) that is responsible for detecting and synchronizing changes to files and folders between a local disk and a cloud storage system.
In order to do this, a sync engine can track the state of both the file that is stored on the disk and that stored in the cloud, and reconcile those states when it receives information that something has changed. For instance, if a file is edited on a local disk, the sync engine may detect that change, realize it needs to send the change to the cloud, send the change, it may wait for the cloud to respond, and then update its local state information to indicate that the change has been made.
A file can change in both the cloud storage system and on the local disk. If those changes are different from one another this can create a conflict. When a conflict exists, the synchronization engine is unable to upload the disk file to the cloud storage system without overwriting what is in the cloud storage system. Likewise, it is unable to download the cloud-based file to the local disk without overwriting the changes on the local disk. When the change to the cloud system and the local disk are the same, then no conflict exists.
One way that the conflict problem has been addressed is to “fork” the file. The “fork” can be created by renaming the file on the disk to a unique name, and then synchronizing down the content from the cloud, to the local disk. The renamed file is then sent up to the cloud storage system as a new file. Forking thus inhibits the loss of changes, but it results in the user having two files with changes, instead.
Another approach to handling this type of conflict is to allow applications, themselves, to merge and co-author files. In one example of this type of architecture, the cloud-based storage system delegates synchronization of the documents to an application that supports co-authoring. For instance, when a change is received for such a document, instead of downloading it, the cloud-based storage system requests the authoring application to do so. As part of this process, the co-authoring application reconciles changes between the local disk and the cloud-based storage system in order to support the co-authoring functionality.
This latter approach means that the cloud-based storage system and the application must communicate with one another in a relatively complex manner. In one example, a COM (or other) connection is established over which a relatively rich set of messages passes that describe the actions that the other party needs to take, in order to synchronize changes. This results in significant complexity. The complexity arises from maintaining the state of the file in two places. Also, because of differences in how the application and the synchronization functionally handle files, some large discrepancies in the maintained file states can result.
Some applications also run in an application container that is isolated from other processes. This makes the complex nature of the communication even more difficult.
The discussion above is merely provided for general background information and is not intended to be used as an aid in determining the scope of the claimed subject matter.